这是因为这个按钮的消息优先级是很低的,所以你得激活窗体让窗体得处理这个按键消息。
除非你把Done设为false,让系统一有空就立即处理消息
procedure TFm_Sendorder.AppIdle(Sender: TObject; var Done: Boolean);
begin
done:=false; // 相对的这样你会发现一个CUP会满负荷
if GetAsyncKeyState(VK_SNAPSHOT) <> 0 then
begin
//捕获截图代码
end;
sleep(1); // 这里延时1毫秒,可以降低cup占用
end;
除非你把Done设为false,让系统一有空就立即处理消息
procedure TFm_Sendorder.AppIdle(Sender: TObject; var Done: Boolean);
begin
done:=false; // 相对的这样你会发现一个CUP会满负荷
if GetAsyncKeyState(VK_SNAPSHOT) <> 0 then
begin
//捕获截图代码
end;
sleep(1); // 这里延时1毫秒,可以降低cup占用
end;
解决方案 »
- dbexpress 连oracle游标的问题
- could not obtain ole control window handle???
- DELPHI一个小技巧,一个小算法
- 一百分求救一个报表问题,请兄弟姐妹不灵赐教。。。。
- “没有注册的类别”,谁遇到过?
- 怎样把信息保存在可执行文件中?
- 如何将"保存对话框"中的文件名和存放文件的路径信息分别送往两个字符型变量中去?
- 火急---替换字符串的函数
- 请问应当怎样测试整个应用程序按下了某个按键,而不是在单个的窗体或控件上?
- 怎样得到驱动器的类型??
- Delphi之Socket编程问题:请求的名称有效并且在数据库中找到。但是tavola没有相关的数据来被解析
- 关于ClientDataSet的Delta问题
procedure TFm_Sendorder.aplctnvnts1Idle(Sender: TObject; var Done: Boolean);
var
bmp: TBitmap;
begin
Done := False;
if GetAsyncKeyState(VK_SNAPSHOT) <> 0 then
begin
bmp := TBitmap.Create;
bmp.Width := Screen.Width;
bmp.Height := Screen.Height;
OpenClipboard(GetWindow(0, 0));
bmp.Handle := GetClipboardData(CF_BITMAP);
CloseClipboard;
bmp.SaveToFile('c:\' + FormatDateTime('YYYYMMDDmmss', Now) + '.bmp');
bmp.Free;
end;
Sleep(1);
end;