Avatar billede perp Nybegynder
24. januar 2001 - 21:03 Der er 19 kommentarer og
3 løsninger

Program til at lave genveje med

jeg skal lave et projekt hvor jeg skal lave et program der skal kunne køre i baggrunden mens et andent program køre. det baggrundsprogrammet skal kunne gøre er at fortælle det andet program at hvis man trykker f.eks. F5 så skal det udføre en komando i et andet program hvor man ikke kan ændre source code.
Det progammet skal kunne er at registre hvilken tast man trykker hvorefter den skal give f.eks. word2000 komandoen til at åbne f.eks. filer hvorefter den skal gå ind i en af sub menuerne og evt. gå ind i endnu et sub menu.
spørgsmålet er så hvordan for jeg det program jeg laver der køre i baggrunden til at fortælle word2000 at den skal udføre den komando?
Avatar billede tdaugaard Nybegynder
24. januar 2001 - 21:16 #1
Meget interesant spørgsmål; følger lige med ...
Avatar billede fico Nybegynder
24. januar 2001 - 21:23 #2
Ditto
Avatar billede pstric Nybegynder
24. januar 2001 - 21:46 #3
Det lyder som noget du måtte kunne klare med noget automation. Jeg ved ikke, hvordan det laves i VB, men det ville ikke være noget større problem i Delphi, at \'fjernstyre\' Word 2000 og få den til at åbne en bestemt fil.
Avatar billede eagleeye Praktikant
25. januar 2001 - 19:40 #4
Du skal lave en key-hook som griber fat i windows generalle key-press kø, koden skal ligge i en DLL. Jeg har læst et sted at VB ikke kan lave True DLL\'er men den lave OLE DLL\'er og at en keyhook skal i en True DLL. Om det er rigtigt ved jeg ikke.
Jeg ved ikke helt om man kan styre hvortil key-pressne skal. Eks.vis når man trykker på F5 skal den kun havde en funktion hvis word-2000 har fokus?

For at snakke med Word-2000 lyder det som du gerne vil kommandere word. Du skal så lave dit program med OLE automatisation. Med OLE skal du kende til Word-OLE function kald. I stil med \"New\", \"FileOpen\", ect.
Avatar billede perp Nybegynder
25. januar 2001 - 21:37 #5
>>Pstric hvordan laver man det så i Delphi gerne lidt detaljeret hvis du kan. Jeg har nemlig aldrig afprøvet Delphi.

Og Eagleeye der må vel være en DLL i windows hvor den gennerelle kye-press kø er. Ved du hvor? kan man ikke ersatte den ved at lave en ny DLL med tilsvarende tal værdier og derefter modificere den lidt via programmet ?
Og hvordan finder jeg Word-OLE funktionens kald er det bare hvad der står eller skal man kende sorce koden før man kan det?
Avatar billede eagleeye Praktikant
25. januar 2001 - 21:49 #6
Prøv at kikke på http://www.geocities.com/CapeCanaveral/6740/allfiles.htm der er en zip fil som hedder keyhook.zip.
Avatar billede pstric Nybegynder
25. januar 2001 - 22:00 #7
Jeg er ikke sikker på, at et eksempel i Delphi vil være til stor nytte, så jeg har prøvet i VB. Det var faktisk ikke så svært at fjernstyre Word.

Lav en ny Standard Applikation.

I Project|References... skal du scrolle ned til Microsoft Word 9.0 Object Library og checke det. Klik OK.

Læg en CommandButton på formen og lav flg. Click event handler:

Private Sub Command1_Click()
  Dim wApp As Word.Application
  Dim wDoc As Word.Document
  Set wApp = New Word.Application
  Set wDoc = wApp.Documents.Add
  wDoc.Activate
  wApp.Visible = True
End Sub

Det starter Word og åbner et nyt dokument.
Avatar billede eagleeye Praktikant
25. januar 2001 - 22:06 #8
Du behøver ikke lave nogen DLL ifølge den .zip fil jeg har linket til du skal bare gøre sådan her:

Private Sub Command1_Click()
    Unload Me
End Sub


Private Sub Form_Load()
    hHook = SetWindowsHookEx(WH_KEYBOARD, AddressOf KeyboardProc, App.hInstance, 0)
End Sub

Private Sub Form_Unload(Cancel As Integer)
    Dim l As Long
    If hHook Then
        l = UnhookWindowsHookEx(hHook)
        hHook = 0
    End If
    End
End Sub

----------------------------
Attribute VB_Name = \"Module1\"
Option Explicit

Declare Function SetWindowsHookEx Lib \"user32\" Alias \"SetWindowsHookExA\" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Declare Function UnhookWindowsHookEx Lib \"user32\" (ByVal hHook As Long) As Long
Public Const WH_KEYBOARD = 2

Global hHook As Long

Function KeyboardProc(ByVal idHook As Long, ByVal lParam As Long, ByVal wParam As Long) As Long
    KeyboardProc = 0
    If lParam = Asc(\"A\") Then
        KeyboardProc = 1
    End If
End Function


-------------

Med SetWindowsHookEx kan du hook\'e dig på diverse køer i windows.
Avatar billede perp Nybegynder
25. januar 2001 - 22:18 #9
Der går nok en lille uge før får afprøvet hvilken svar er det bedste det kunne jo godt være jeg fik brug for ydereligere hjælp men keep watching
endtil vidre har I været en meget god hjælp
på forhånd tak.
Avatar billede pstric Nybegynder
25. januar 2001 - 22:22 #10
perp>> Det er ikke ET af svarene, der er \'det bedste\'. eagleeye og jeg har svaret på hvert vores delspørgsmål.
Avatar billede perp Nybegynder
25. januar 2001 - 22:29 #11
ja ok men havde nu hellere ikke tænkt mig kun at give kun én af jer point =)
Avatar billede eagleeye Praktikant
25. januar 2001 - 22:37 #12
Her er en side for MS som besriver lidt om OLE Automation:

http://support.microsoft.com/support/kb/articles/q184/9/74.asp

Der er nogle links nederst på siden, men microsoft DNS server er vist nede igen. Prøv at kikke forbi MS senere.
Avatar billede eagleeye Praktikant
25. januar 2001 - 22:40 #13
Linket ovenfor er Word 8.0..
Linket her er for word 9.0
http://support.microsoft.com/support/kb/articles/q237/3/37.asp

Du spørger bare så vil vi prøve at hjælp.
Avatar billede eagleeye Praktikant
25. januar 2001 - 22:45 #14
Her er også en god beskrielse af OLE Automation for Word:

http://www.inquiry.com/techtips/vfox_pro/10min/10min0600.asp
Avatar billede perp Nybegynder
27. februar 2001 - 21:48 #15
ok det tog godt nok lidt mere end en uge inden jeg fik tjekket det =( men her er følgene.
først pstric ->
når jeg laver det du siger kan den ikke compile det eller lave det til .exe den siger noget med at dim wApp ikke er god eller lign..... desuden har jeg prøvet at sætte det som declaration og det hjælper hellere ikke (går ud fra du mener standard exe?)

Eageleye ->
dit virker hellere ikke man kan godt nok compile det osv. men det funger ikke man kan godt skrive f.eks. A og a selvom man har sat den til ikke at kunne gøre det. desuden står der oxo at det er til win95 men win98 er da næsten det samme på dette punkt ik? (ville det oxo virke i win2000).
Avatar billede pstric Nybegynder
28. februar 2001 - 04:46 #16
I Project|References... skal du scrolle ned til Microsoft Word 9.0 Object Library og checke det. Klik OK.

Det jeg mente her var, at du skulle sørge for at fluebenet til venstre for \"Microsoft Word 9.0 Object Library\" var sat. Har du gjort det?
Avatar billede perp Nybegynder
28. februar 2001 - 19:18 #17
ja det har jeg men når jeg compiler skriver den dette:
Compile error :
User-defined type not defined
Avatar billede pstric Nybegynder
28. februar 2001 - 20:02 #18
Okay, jeg prøver lige én gang til.

Starter VB og vælger Open i den dialogbox der kommer op, hvor Standard EXE er valgt.
Dobbeltklikker på CommandButton, så der placeres en midt på formen.
Dobbeltklikker på Command1, og genererer derved:
  Private Sub Command1_Click()

  End Sub
Vælger Project->References. Scroller ned til Microsoft Word... og sætter fluebenet til venstre. Klikker OK.
Indsætter linierne fra 25/01 2001 22:00:12
Klikker på Start toolbutton\'en i toolbaren under menuen. Det starter en form med en CommandButton.
Klikker på Command1. Word åbner med et tomt dokument.

Det virker godt nok hos mig. Det kan være at der er nogle af VB-hajerne der kan se hvad der er galt.

Får du listen med properties og metoder, efter at du har skrevet \"Dim wApp As Word.\"? Hos mig foreslår den \"Word\" så snart jeg har indtastet \"Wo\" og \"Application\" efter \"Ap\".
Avatar billede perp Nybegynder
28. februar 2001 - 20:22 #19
nej det gør den ikke ??? har du installeret noget som jeg ikke har ??? skulle ellers have installeret det hele
Avatar billede pstric Nybegynder
28. februar 2001 - 20:35 #20
Jeg har Visual Studio 6.0 og Office 2000 Pro installeret på Win2k pro.

Du er _helt_ sikker på at du husker at sætte fluebenet, ikk?. Det er ikke nok, at Word... er markeret med blåt.

Nå, det har du jo nok. Jeg kan desværre ikke gennemskue dit problem, men af en eller anden grund bliver Word åbenbart ikke registreret ordentligt i VB.

Prøv evt. om du kan bruge andre Office komponenter.
Avatar billede perp Nybegynder
07. marts 2001 - 13:30 #21
pstric -> nu startede du med at sige at det ville være nemt i delphi og nu tror jeg at jeg vil lave det i det istedet så kan du forklare mig hvordan det gøres der ??
må gerne være ret detaljeret da jeg ikke lige har den største erfaring med delphi4 (endnu) =)
Avatar billede perp Nybegynder
13. marts 2001 - 12:58 #22
jeg syntes her er lidt dødt nu så jeg vælger at tage nogle af pointne tilbage men i får da lidt som en kompensation.
jeg vil oprette et nyt spørgsmål under programering -> delphi
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester