var TheWindow : HWND; begin TheWindow := FindWindow(nil, '计算器'); if TheWindow <> 0 then PostMessage(TheWindow,WM_CLOSE,0,0); end; procedure EndProcess(AExeName: string); var lppe: TProcessEntry32; found : boolean; Hand : THandle; begin Hand := CreateToolhelp32Snapshot(TH32CS_SNAPALL,0); found := Process32First(Hand,lppe); while found do begin if UpperCase(StrPas(lppe.szExeFile)) = UpperCase(AExeName) then begin TerminateProcess(OpenProcess(PROCESS_TERMINATE, true, lppe.th32ProcessID), 0); Exit; end else found := Process32Next(Hand,lppe); end; end;const PROCESS_TERMINATE = $0001; var ProcessHandle : THandle; ProcessID: Integer; TheWindow : HWND; begin TheWindow := FindWindow(nil, '计算器'); GetWindowThreadProcessID(TheWindow, @ProcessID); ProcessHandle := OpenProcess(PROCESS_TERMINATE, FALSE, ProcessId); TerminateProcess(ProcessHandle,4); end;
TheWindow : HWND;
begin
TheWindow := FindWindow(nil, '计算器');
if TheWindow <> 0 then
PostMessage(TheWindow,WM_CLOSE,0,0);
end;
procedure EndProcess(AExeName: string);
var
lppe: TProcessEntry32;
found : boolean;
Hand : THandle;
begin
Hand := CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
found := Process32First(Hand,lppe);
while found do
begin
if UpperCase(StrPas(lppe.szExeFile)) = UpperCase(AExeName) then
begin
TerminateProcess(OpenProcess(PROCESS_TERMINATE, true,
lppe.th32ProcessID), 0);
Exit;
end
else
found := Process32Next(Hand,lppe);
end;
end;const
PROCESS_TERMINATE = $0001;
var
ProcessHandle : THandle;
ProcessID: Integer;
TheWindow : HWND;
begin
TheWindow := FindWindow(nil, '计算器');
GetWindowThreadProcessID(TheWindow, @ProcessID);
ProcessHandle := OpenProcess(PROCESS_TERMINATE, FALSE, ProcessId);
TerminateProcess(ProcessHandle,4);
end;
case x
keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), 0, 0);
发送一个标示:
postmessage(Edit1.Handle,WM_KEYDOWN,65,0);
这是一个API函数。
Edit1.Handle 是句柄;
WM_KEYDOWN 是按下键的消息;
65 是指键'a'的值 65……90 是 a……z;
回车键是 VK_RETURN
来自:fu_xiang_yu, 时间:2001-6-1 17:50:00, ID:550400
(转)◇[DELPHI]发送虚拟键值ctrl V
procedure sendpaste;
begin
keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), 0, 0);
keybd_event(ord('V'), MapVirtualKey(ord('V'), 0), 0, 0);
keybd_event(ord('V'), MapVirtualKey(ord('V'), 0), KEYEVENTF_KEYUP, 0);
keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), KEYEVENTF_KEYUP, 0);
end;◇[DELPHI]按键接受消息
OnCreate事件中处理:Application.OnMessage:=MyOnMessage;
procedure TForm1.MyOnMessage(var MSG:TMSG;var Handle:Boolean);
begin
if msg.message=256 then ... //ANY键
if msg.message=112 then ... //F1
if msg.message=113 then ... //F2
end;◇[DELPHI]关于键盘常量名
VK_BACK/VK_TAB/VK_RETURN/VK_SHIFT/VK_CONTROL/VK_MENU/VK_PAUSE/VK_ESCAPE
/VK_SPACE/VK_LEFT/VK_RIGHT/VK_UP/VK_DOWN
F1--F12:$70(112)--$7B(123)
A-Z:$41(65)--$5A(90)
0-9:$30(48)--$39(57)
RegisterHotKey(Handle,11,0,192); // ~键的虚拟码
这一节中,只简单地把键盘的主要虚拟键码列出来,如果需要更详细的信息,则在msdn上的Platform SDK/User Interface Services/User Input/VirtualKey Codes可以看到完整的键码列表。
首先列出,然后再做解释:
--------------------------------------------------------------------------------十进制值 标识符 IBM兼容键盘 --------------------------------------------------------------------------------1 VK_LBUTTON 鼠标左键
2 VK_RBUTTON 鼠标右键
3 VK_CANCEL Ctrl+Break(通常不需要处理)
4 VK_MBUTTON 鼠标中键
8 VK_BACK Backspace
9 VK_TAB Tab
12 VK_CLEAR Num Lock关闭时的数字键盘5
13 VK_RETURN Enter(或者另一个)
16 VK_SHIFT Shift(或者另一个)
17 VK_CONTROL Ctrl(或者另一个)
18 VK_MENU Alt(或者另一个)
19 VK_PAUSE Pause
20 VK_CAPITAL Caps Lock
27 VK_ESCAPE Esc
32 VK_SPACE Spacebar
33 VK_PRIOR Page Up
34 VK_NEXT Page Down
35 VK_END End
36 VK_HOME Home
37 VK_LEFT 左箭头
38 VK_UP 上箭头
39 VK_RIGHT 右箭头
40 VK_DOWN 下箭头
41 VK_SELECT 可选
42 VK_PRINT 可选
43 VK_EXECUTE 可选
44 VK_SNAPSHOT Print Screen
45 VK_INSERT Insert
46 VK_DELETE Delete
47 VK_HELP 可选
48~57 无 主键盘上的0~9
65~90 无 A~Z
96~105 VK_NUMPAD0~VK_NUMPAD9 Num Lock打开时数字键盘上的0~9
106 VK_NULTIPLY 数字键盘上的*
107 VK_ADD 数字键盘上的+
108 VK_SEPARATOR 可选
109 VK_SUBTRACT 数字键盘上的-
110 VK_DECIMAL 数字键盘上的.
111 VK_DIVIDE 数字键盘上的/
112~135 VK_F1~VK_F24 功能键F1~F24
144 VK_NUMLOCK Num Lock
145 VK_SCROLL Scroll Lock --------------------------------------------------------------------------------
下边三个是MS键盘上的: --------------------------------------------------------------------------------十进制值 标识符 Microsoft自然键盘 --------------------------------------------------------------------------------91 VK_LWIN 左Windows键
92 VK_RWIN 右Windows键
93 VK_APPS Applications键 --------------------------------------------------------------------------------
两种键盘消息:
非系统键 WM_KEYDOWN WM_KEYUP
系统键 WM_SYSKEYDOWN WM_SYSKEYUP
在键盘消息中,虚拟键码都保存在wParam参数中。这些虚拟键码的定义,是在winuser.h文件中,所以当用到键盘的虚拟键码时,要包含这个文件,不过,如果已经包含了windows.h文件,那么就不需要再包含winuser.h文件了,因为windows.h文件已经包含了winuser.h文件。
Print Screen键一般不需要处理。
VK_SELECT、VK_PRINT、VK_EXECUTE和VK_HELP很少出现。
数字和字母的虚拟键码是ASCII码。
F1~F24的功能键中,windows只用到了F1~F10。
用GetKeyState(int):(参数是以VK_开头的虚拟键码)获得所有有开关性质的键的状态(是否按下),比如shift、Alt等。用GetAsyncKeySate();获得当前某键的状态。
WM_SYSKEYDOWN和WM_SYSKEYUP消息由Windows系统函数使用,所以用户可以不管她。
WM_CHAR和WM_DEADCHAR消息是从WM_KEYDOWN得到的,而WM_SYSCHAR和WM_SYSDEADCHAR消息是从WM_SYSKEYDOWN消息得到的。在某些非U.S.英语键盘上,有些键用于给字母加上音调,因为它们本身不产生字符,所以称之为“死键”。
RegisterClass有两个版本,分别是ANSI版本的RegisterClassA和Uncode版本的RegisterClassW。如果程序用RegisterClass注册窗口类,那么当定义UNICODE标识符时就调用RegisterClassW,否则就调用RegisterClassA。同一窗口过程可能会用到两个窗口类,她们有可能用两种不同的版本注册。用下列函数可以获得窗口注册的类型:
fUnicode=IsWindowUnicode(hwnd);
如果hwnd的窗口过程获得Unicode消息,那么变量fUnicode将为TRUE,,这表明窗口是基于用RegisterClassW注册的窗口类。
下一节将对过去的第三个程序做修改,以加上键盘控制。 911