|  | 		    
					
        
         
          
         
	
          | |  | Automations interface Fra : Anton Vestergaard
 | 
 Dato :  17-12-01 12:01
 | 
 |  | Hej NG
 Jeg er igang med at lave et program der kun må åbnes i en instans på hver
 maskine.
 Den del har jeg fået løst ved hjælp af noget FindWindow og starte programmet
 op i Sub Main.
 Yderligere skal jeg kunne reinitialisere programmet ved at kalde programmet
 fra et andet program.
 Jeg troede at jeg kunne gøre dette på en Quick and Dirty måde ved at
 undersøge Commandline i
 Sub Main, og så der se efter et R eller lignende, det volder desværre en hel
 del problemer.
 Jeg har overvejet istedet at lave et automations interface til programmet,
 således at man kan kalde
 programmet fra et andet program uden at starte en ny instans af programmet.
 Jeg har lavet mit program om til en ActiveX Exe fil, og kan godt kalde
 funktioner i programmet via
 en klassefil, men jeg starter også flere instanser af programmet, og så går
 ideen lige som af det!
 
 Hvad jeg har brug for er nogen ideer, tips, links til hvordan man kan gøre
 det på den rigtige måde.
 
 mvh
 Anton
 
 
 
 
 |  |  | 
  Jens Vestergaard (17-12-2001) 
 
	
          | |  | Kommentar Fra : Jens Vestergaard
 | 
 Dato :  17-12-01 13:31
 | 
 |  | 
 
            "Anton Vestergaard" <anton_dk@hotmail.com> skrev i en meddelelse
 news:3c1dd061$0$93406$edfadb0f@dspool01.news.tele.dk...
 > Jeg er igang med at lave et program der kun må åbnes i en instans på hver
 > maskine.
 > Den del har jeg fået løst ved hjælp af noget FindWindow og starte
 programmet
 > op i Sub Main.
 Prøv med App.PrevInstance i stedet for:
 If App.PrevInstance Then
     MsgBox "Kører allerede"
 End if
 .... eller noget i den retning.
 > Yderligere skal jeg kunne reinitialisere programmet ved at kalde
 programmet
 > fra et andet program.
 > Jeg troede at jeg kunne gøre dette på en Quick and Dirty måde ved at
 > undersøge Commandline i
 > Sub Main, og så der se efter et R eller lignende, det volder desværre en
 hel
 If Instr(COMMAND,"/R") > 0 Then
     MsgBox "Parameter /R findet i kommandolinien"
 End If
 --
 mvh
 Jens Vestergaard
www.railsoft.dk |  |  | 
  Anton Vestergaard (17-12-2001) 
 
	
          | |  | Kommentar Fra : Anton Vestergaard
 | 
 Dato :  17-12-01 14:41
 | 
 |  | 
 
            Yup. Men det løser ikke opgaven.
 Mit program skal udføre en funktion hvis det er åbnet i forvejen (og finder
 et R i Commandline).
 Når jeg udfører en funktion her startes en ny instans af programmet, dog
 uden interface, men den kan findes
 i tasklisten.
 Men tak.
 Anton
 "Jens Vestergaard" <j@railsoft.dk> skrev i en meddelelse
 news:3c1de568$0$52985$edfadb0f@dspool01.news.tele.dk...
 > "Anton Vestergaard" <anton_dk@hotmail.com> skrev i en meddelelse
 > news:3c1dd061$0$93406$edfadb0f@dspool01.news.tele.dk...
 > > Jeg er igang med at lave et program der kun må åbnes i en instans på
 hver
 > > maskine.
 > > Den del har jeg fået løst ved hjælp af noget FindWindow og starte
 > programmet
 > > op i Sub Main.
 >
 > Prøv med App.PrevInstance i stedet for:
 > If App.PrevInstance Then
 >     MsgBox "Kører allerede"
 > End if
 > ... eller noget i den retning.
 >
 > > Yderligere skal jeg kunne reinitialisere programmet ved at kalde
 > programmet
 > > fra et andet program.
 > > Jeg troede at jeg kunne gøre dette på en Quick and Dirty måde ved at
 > > undersøge Commandline i
 > > Sub Main, og så der se efter et R eller lignende, det volder desværre en
 > hel
 >
 >
 > If Instr(COMMAND,"/R") > 0 Then
 >     MsgBox "Parameter /R findet i kommandolinien"
 > End If
 >
 > --
 > mvh
 > Jens Vestergaard
 > www.railsoft.dk >
 >
            
             |  |  | 
  Tomas Christiansen (17-12-2001) 
 
	
          | |  | Kommentar Fra : Tomas Christiansen
 | 
 Dato :  17-12-01 23:16
 | 
 |  | Anton Vestergaard skrev:
 > Jeg er igang med at lave et program der kun må åbnes i en instans på
 hver
 > maskine.
 ....
 > Jeg har lavet mit program om til en ActiveX Exe fil, og kan godt
 kalde
 > funktioner i programmet via
 > en klassefil, men jeg starter også flere instanser af programmet, og
 så går
 > ideen lige som af det!
 
 Du kan lave en lille synkroniseringsobjekt, ved at oprette et ActiveX
 EXE projekt (f.eks. prjSynkro) med en klasse (f.eks. clsSynkro) og en
 metode (f.eks. Init), som dit program skal kalde når det starter op.
 
 Du skal huske at sætte Instancing til MultiUse på klassen clsSynkro i
 prjSynkro ActiveX EXE projektet, og så har du mulighed for dele
 indholdet af globale data mellem de enkelte instancer af klassen
 (tilføj et standard kode.modul - default navn: Module1.bas - til
 formålet).
 
 Med andre ord, hvis du i prjSynkro har variabel i Module1.bas:
 
 Public global As Long
 
 og du hver gang du kalder metoden Init i klassen clsSynkro gør
 følgende:
 
 global = global + 1
 
 vil værdien være talt 1 op i ALLE instanser af clsSynkro.
 
 Du vil også kunne bemærke at første gang et program opretter en
 instans af clsSynkro, optræder prjSynkro på listen over kørende
 programmer, men der kommer ikke flere instanser af prjSynkro til,
 selvom nye programmer opretter instanser af clsSynkro. Først når den
 sidste instans af clsSynkro nedlægges, stopper programmet prjSynkro.
 
 Husk iøvrigt at gå ind i Project, Properties, Component og vælg
 "Binary Compatibility" efter FØRSTE gang du har linket projektet til
 en EXE-fil. Så undgår du at få pladret din registreringsbase til med
 nye nøgler hver gang projektet linkes!
 
 -------
 Tomas
 
 
 
 |  |  | 
  Anton Vestergaard (17-12-2001) 
 
	
          | |  | Kommentar Fra : Anton Vestergaard
 | 
 Dato :  17-12-01 23:43
 | 
 |  | Ærbødigst tak.
 Den sidste del forstår jeg så ikke helt. Men det lærer jeg nok engang.
 Det andet virkede ihvertfald helt som det skulle.
 Det jeg gjorde forkert var at jeg direkte fra klassen kaldte
 en procedure i modulet/formen, hvorved der blev oprettet
 en ny instans.
 Igen, tak.
 Anton
 "Tomas Christiansen" <toc@blikroer.removethis.dk> skrev i en meddelelse
 news:9vlqqo$2v75$1@news.cybercity.dk...
 > Anton Vestergaard skrev:
 > > Jeg er igang med at lave et program der kun må åbnes i en instans på
 > hver
 > > maskine.
 > ...
 > > Jeg har lavet mit program om til en ActiveX Exe fil, og kan godt
 > kalde
 > > funktioner i programmet via
 > > en klassefil, men jeg starter også flere instanser af programmet, og
 > så går
 > > ideen lige som af det!
 >
 > Du kan lave en lille synkroniseringsobjekt, ved at oprette et ActiveX
 > EXE projekt (f.eks. prjSynkro) med en klasse (f.eks. clsSynkro) og en
 > metode (f.eks. Init), som dit program skal kalde når det starter op.
 >
 > Du skal huske at sætte Instancing til MultiUse på klassen clsSynkro i
 > prjSynkro ActiveX EXE projektet, og så har du mulighed for dele
 > indholdet af globale data mellem de enkelte instancer af klassen
 > (tilføj et standard kode.modul - default navn: Module1.bas - til
 > formålet).
 >
 > Med andre ord, hvis du i prjSynkro har variabel i Module1.bas:
 >
 >     Public global As Long
 >
 > og du hver gang du kalder metoden Init i klassen clsSynkro gør
 > følgende:
 >
 >     global = global + 1
 >
 > vil værdien være talt 1 op i ALLE instanser af clsSynkro.
 >
 > Du vil også kunne bemærke at første gang et program opretter en
 > instans af clsSynkro, optræder prjSynkro på listen over kørende
 > programmer, men der kommer ikke flere instanser af prjSynkro til,
 > selvom nye programmer opretter instanser af clsSynkro. Først når den
 > sidste instans af clsSynkro nedlægges, stopper programmet prjSynkro.
 >
 > Husk iøvrigt at gå ind i Project, Properties, Component og vælg
 > "Binary Compatibility" efter FØRSTE gang du har linket projektet til
 > en EXE-fil. Så undgår du at få pladret din registreringsbase til med
 > nye nøgler hver gang projektet linkes!
 >
 > -------
 > Tomas
 >
 
 
 
 
 |  |  | 
   Tomas Christiansen (18-12-2001) 
 
	
          | |  | Kommentar Fra : Tomas Christiansen
 | 
 Dato :  18-12-01 19:20
 | 
 |  | Anton Vestergaard skrev:
 > Ærbødigst tak.
 
 Selv tak.
 
 > Den sidste del forstår jeg så ikke helt. Men det lærer jeg nok
 engang.
 
 Hvis det er noget, som du ønsker uddybet, må du være mere specifik
 mht. hvad det er, som du ikke forstår.
 
 -------
 Tomas
 
 
 
 |  |  | 
    Anton Vestergaard (19-12-2001) 
 
	
          | |  | Kommentar Fra : Anton Vestergaard
 | 
 Dato :  19-12-01 23:23
 | 
 |  | Hej Tomas
 Det jeg ikke helt forstår er hvorfor man skal vælg Binary Compability efter
 første gang man har linket til et andet program.
 Jeg vidste heller ikke det med nye nøgler i registreringsdatabasen.
 Hvad vil der egentlig ske hvis jeg i programmet (ActiveX Exe) opretter nye
 instanser af clsSynkro på samme måde som var det et andet program?
 Multithreading?
 
 mvh
 Anton
 "Tomas Christiansen" <toc@blikroer.removethis.dk> skrev i en meddelelse
 news:9vo1eh$2fm$1@news.cybercity.dk...
 > Anton Vestergaard skrev:
 > > Ærbødigst tak.
 >
 > Selv tak.
 >
 > > Den sidste del forstår jeg så ikke helt. Men det lærer jeg nok
 > engang.
 >
 > Hvis det er noget, som du ønsker uddybet, må du være mere specifik
 > mht. hvad det er, som du ikke forstår.
 >
 > -------
 > Tomas
 >
 
 
 
 
 |  |  | 
     Tomas Christiansen (22-12-2001) 
 
	
          | |  | Kommentar Fra : Tomas Christiansen
 | 
 Dato :  22-12-01 00:06
 | 
 |  | Anton Vestergaard skrev:
 > Det jeg ikke helt forstår er hvorfor man skal vælg Binary
 Compability efter
 > første gang man har linket til et andet program.
 > Jeg vidste heller ikke det med nye nøgler i registreringsdatabasen.
 
 Problemet er, at standard-opsætningen "Project Compatibility" gør, at
 hver gang man linker sit program (File, Make xxx.exe), bliver der
 genereret en ny beskrivelse af programmet i registreringsbasen, og den
 gamle beskrivelse bliver ikke slettet!
 
 Det næste problem er, at "Binary Compatibility" kun kan sættes, hvis
 programmet ER blevet linket en gang (VB skal have noget at sammenligne
 med, for at kunne opdage ændringer som medfører inkompatibilitet).
 
 > Hvad vil der egentlig ske hvis jeg i programmet (ActiveX Exe)
 opretter nye
 > instanser af clsSynkro på samme måde som var det et andet program?
 > Multithreading?
 
 Så vidt jeg husker, kun hvis du opretter nye objekter med
 CreateObject, når det er indenfor samme projekt, at du får muligheden
 for flere tråde, og du får ikke umiddelbart meget ud af at der
 oprettes flere tråde. Der vil kun være én af gangen, som rent faktisk
 gør noget.
 
 Dette kan man dog komme ud over på flere forskellige måder. F.eks. ved
 at bruge en system-timer til at aktivere tråde med, men det er lidt
 tricky at få til at virke efter hensigten...
 
 -------
 Tomas
 
 
 
 |  |  | 
      Anton Vestergaard (22-12-2001) 
 
	
          | |  | Kommentar Fra : Anton Vestergaard
 | 
 Dato :  22-12-01 11:57
 | 
 |  | Hej Tomas
 Tak for den gode og uddybende forklaring.
 
 mvh
 Anton
 "Tomas Christiansen" <toc@blikroer.removethis.dk> skrev i en meddelelse
 news:a00f7t$2cir$1@news.cybercity.dk...
 > Anton Vestergaard skrev:
 > > Det jeg ikke helt forstår er hvorfor man skal vælg Binary
 > Compability efter
 > > første gang man har linket til et andet program.
 > > Jeg vidste heller ikke det med nye nøgler i registreringsdatabasen.
 >
 > Problemet er, at standard-opsætningen "Project Compatibility" gør, at
 > hver gang man linker sit program (File, Make xxx.exe), bliver der
 > genereret en ny beskrivelse af programmet i registreringsbasen, og den
 > gamle beskrivelse bliver ikke slettet!
 >
 > Det næste problem er, at "Binary Compatibility" kun kan sættes, hvis
 > programmet ER blevet linket en gang (VB skal have noget at sammenligne
 > med, for at kunne opdage ændringer som medfører inkompatibilitet).
 >
 > > Hvad vil der egentlig ske hvis jeg i programmet (ActiveX Exe)
 > opretter nye
 > > instanser af clsSynkro på samme måde som var det et andet program?
 > > Multithreading?
 >
 > Så vidt jeg husker, kun hvis du opretter nye objekter med
 > CreateObject, når det er indenfor samme projekt, at du får muligheden
 > for flere tråde, og du får ikke umiddelbart meget ud af at der
 > oprettes flere tråde. Der vil kun være én af gangen, som rent faktisk
 > gør noget.
 >
 > Dette kan man dog komme ud over på flere forskellige måder. F.eks. ved
 > at bruge en system-timer til at aktivere tråde med, men det er lidt
 > tricky at få til at virke efter hensigten...
 >
 > -------
 > Tomas
 >
 
 
 
 
 |  |  | 
 |  |