Seite 1 von 1

SaveAll für die PB-IDE

Verfasst: 16.02.2006 12:27
von ts-soft
Folgender Code funktioniert nur bei der Spracheinstellung "deutsch",
desweiteren sollten alle offenen Sourcen bereits einmal gespeichert worden
sein, da sonst das Delay nicht reicht.

Einfach als Tool integrieren, am besten ein Icon verpassen und in die
Symbolleiste integrieren.

Ich hoffe, der eine oder andere kommt damit klar und kann es gebrauchen :wink:

Code: Alles auswählen

Procedure SendKeys(handle,window$,keys$) 
  Protected thread1.l, thread2.l, r.l, vk$, s.l, s$, vk.l, shifted.l
  If window$<>"" : handle=FindWindow_(0,window$) : EndIf ; Use window$ instead of handle. 
  If IsWindow_(handle)=0 ; Does the target window actually exist? 
    ProcedureReturn 0 ; Nope, so report 0 for failure to type. 
  Else 
    ; This block gives the target window the focus before typing. 
    thread1=GetWindowThreadProcessId_(GetForegroundWindow_(),0) 
    thread2=GetWindowThreadProcessId_(handle,0) 
    If thread1<>thread2 : AttachThreadInput_(thread1,thread2,#True) : EndIf 
    SetForegroundWindow_(handle) ; Target window now has the focus for typing. 
    Delay(125) ; 1/8 second pause before typing, to prevent fast CPU problems. 
    ; Now the actual typing starts. 
    For r=1 To Len(keys$) 
      vk$=Mid(keys$,r,1) 
      If vk$="{" ; Special key found. 
        s=FindString(keys$,"}",r+1)-(r+1) ; Get length of special key. 
        s$=Mid(keys$,r+1,s) ; Get special key name. 
        Select s$ ; Get virtual key code of special key. 
          Case "ALTDOWN" : keybd_event_(#VK_MENU,0,0,0) ; Hold ALT down. 
          Case "ALTUP" : keybd_event_(#VK_MENU,0,#KEYEVENTF_KEYUP,0) ; Release ALT. 
          Case "BACKSPACE" : vk=#VK_BACK 
          Case "CONTROLDOWN" : keybd_event_(#VK_CONTROL,0,0,0) ; Hold CONTROL down. 
          Case "CONTROLUP" : keybd_event_(#VK_CONTROL,0,#KEYEVENTF_KEYUP,0) ; Release CONTROL. 
          Case "DELETE" : vk=#VK_DELETE 
          Case "DOWN" : vk=#VK_DOWN 
          Case "END" : vk=#VK_END 
          Case "ENTER" : vk=#VK_RETURN 
          Case "F1" : vk=#VK_F1 
          Case "F2" : vk=#VK_F2 
          Case "F3" : vk=#VK_F3 
          Case "F4" : vk=#VK_F4 
          Case "F5" : vk=#VK_F5 
          Case "F6" : vk=#VK_F6 
          Case "F7" : vk=#VK_F7 
          Case "F8" : vk=#VK_F8 
          Case "F9" : vk=#VK_F9 
          Case "F10" : vk=#VK_F10 
          Case "F11" : vk=#VK_F11 
          Case "F12" : vk=#VK_F12 
          Case "ESCAPE" : vk=#VK_ESCAPE 
          Case "HOME" : vk=#VK_HOME 
          Case "INSERT" : vk=#VK_INSERT 
          Case "LEFT" : vk=#VK_LEFT 
          Case "PAGEDOWN" : vk=#VK_NEXT 
          Case "PAGEUP" : vk=#VK_PRIOR 
          Case "PRINTSCREEN" : vk=#VK_SNAPSHOT 
          Case "RETURN" : vk=#VK_RETURN 
          Case "RIGHT" : vk=#VK_RIGHT 
          Case "SHIFTDOWN" : shifted=1 : keybd_event_(#VK_SHIFT,0,0,0) ; Hold SHIFT down. 
          Case "SHIFTUP" : shifted=0 : keybd_event_(#VK_SHIFT,0,#KEYEVENTF_KEYUP,0) ; Release SHIFT. 
          Case "TAB" : vk=#VK_TAB 
          Case "UP" : vk=#VK_UP 
        EndSelect 
        If Left(s$,3)<>"ALT" And Left(s$,7)<>"CONTROL" And Left(s$,5)<>"SHIFT" 
          keybd_event_(vk,0,0,0) : keybd_event_(vk,0,#KEYEVENTF_KEYUP,0) ; Press the special key. 
        EndIf 
        r=r+s+1 ; Continue getting the keystrokes that follow the special key. 
      Else 
        vk=VkKeyScanEx_(Asc(vk$),GetKeyboardLayout_(0)) ; Normal key found. 
        If vk>304 And shifted=0 : keybd_event_(#VK_SHIFT,0,0,0) : EndIf ; Due to shifted character. 
        keybd_event_(vk,0,0,0) : keybd_event_(vk,0,#KEYEVENTF_KEYUP,0) ; Press the normal key. 
        If vk>304 And shifted=0 : keybd_event_(#VK_SHIFT,0,#KEYEVENTF_KEYUP,0) : EndIf ; Due to shifted character. 
      EndIf 
    Next 
    If thread1<>thread2 : AttachThreadInput_(thread1,thread2,#False) : EndIf ; Finished typing to target window! 
    keybd_event_(#VK_MENU,0,#KEYEVENTF_KEYUP,0) ; Release ALT key if user forgot. 
    keybd_event_(#VK_CONTROL,0,#KEYEVENTF_KEYUP,0) ; Release CONTROL key if user forgot. 
    keybd_event_(#VK_SHIFT,0,#KEYEVENTF_KEYUP,0) ; Release SHIFT key if user forgot. 
    ProcedureReturn 1 ; Report successful typing! :) 
  EndIf 
EndProcedure

Define.l hWnd
hWnd.l = Val(GetEnvironmentVariable("PB_TOOL_MainWindow"))
If hWnd
  SendKeys(hWnd, "", "{ALTDOWN}Dp{ALTUP}")
  Delay(2000)
  SendKeys(hWnd, "", "{F5}")
EndIf

Verfasst: 16.02.2006 17:25
von Hroudtwolf
Hallo TS-Soft.

Nette Idee.

Verfasst: 16.02.2006 17:35
von ts-soft
Hroudtwolf hat geschrieben:Hallo TS-Soft.

Nette Idee.
Danke :wink: habs nicht für mich gemacht, ist mehr als Anregung gedacht,
vielleicht mal selber seine Programmierwerkzeuge zu verbessern, solange
keine anderen alternativen in Aussicht sind.