我写了一个delphi的读ic卡程序,可以将芯片号读出,现在的目的是想将这个芯片号发送到其他的应用程序,例如:
打开“记事本”或其他接受键盘输入的应用程序,把卡放在读卡器上,虽然我的读卡程序在后台,依然能读出芯片号,并显示在“记事本”里,这个读卡程序该怎么设计啊?

解决方案 »

  1.   

    打开一记事本,先保存为ic.txt, 什么字都不能有.var
      MainHandle,EditHandle :HWND;
      str: array [0..254] of char;
    begin
       MainHandle := FindWindow('Notepad','ic.txt - 记事本'); //找到记事本程序窗口句柄
       EditHandle := FindWindowEx(MainHandle, 0, 'Edit', '' ); //找到记事本程序上的Edit控件.
       str := '就这么简单';
       SendMessage(EditHandle, WM_SETTEXT, length(str){你要发送的文字长度},lparam(@str[0]));
    end;注意: 下面这条语句最好只执行一次.EditHandle := FindWindowEx(MainHandle, 0, 'Edit', '' ); //找到记事本程序上的Edit控件.我来告诉你为什么:看一下FindWindowEx函数的参数就明白了. 第一个参数是父窗口句柄,第二个参数是下一个子窗口句柄,第三个参数是你要找的窗口类名,第四个是窗口标题.记事本的edit的窗口标题就是你编辑的内容. 所以EditHandle最好是在第一次取得后,保存为一个全局的.  
      

  2.   

    谢谢
    我的本意是无论什么应用程序(不一定是notepad),只要在前台的,并且能够接受文本输入的,在当前焦点下(不一定是edit),就可以接受卡的芯片号
    听有人说,可以用keyboardEvent来实现,怎么用法?
      

  3.   

    // 模拟键盘输入一串字符。
    procedure TypeKeyString(s: string);
    var
      c: Char;
      i: integer;
      off: integer;
      vkw: Word;
    begin
      for i := 1 to Length(s) do
      begin
        c := s[i];
        if (c < #128) then
        begin
          vkw := VkKeyScan(c);
          off := 0;
          if vkw and $100 = $100 then
            keybd_event(VK_SHIFT, 0, off, 0);
          if vkw and $200 = $200 then
            keybd_event(VK_CONTROL, 0, off, 0);
          if vkw and $400 = $400 then
            keybd_event(VK_MENU, 0, off, 0);      off := 0;
          keybd_event(Byte(vkw), 0, off, 0);
          //sleep(20);
          off := off or KEYEVENTF_KEYUP;
          keybd_event(Byte(vkw), 0, off, 0);      off := off or KEYEVENTF_KEYUP;
          if vkw and $100 = $100 then
            keybd_event(VK_SHIFT, 0, off, 0);
          if vkw and $200 = $200 then
            keybd_event(VK_CONTROL, 0, off, 0);
          if vkw and $400 = $400 then
            keybd_event(VK_MENU, 0, off, 0);
        end;
      end;
    end;