storme Posted January 13, 2014 Share Posted January 13, 2014 G'day all Just want some advice... from those that have already done it if possible. What I want to do is to create a "simple" "User data collector" that acts as a server (Inter-process comms). I then want to create a UDF I can add to each "client" program that needs the user data. So that is skeleton of the idea. Can anyone suggest a method (I know there are many) that would handle this? WHY do I want to do this? I created a simple program to collect user data (name, address, etc) to email back to the office to update records. Non sensitive information is stored in an INI file for later use (i.e the next time I work on the computer). This quickly got extended to enter this data and passwords into various programs as they are being installed. But now I've got a rather large section of the "simple" program that looks for windows and enters data and it's getting very messy with all the programs it supports... Now for some more details. The server won't know what clients or how many clients there will be. Potentially there could be multiple programs requesting information at the same time Passwords will be passed through this system so shouldn't be easily seen (e.g. customer looking over my shoulder) Also would be good if it isn't easy for programs to just grab the info... (A wish only) - If the information isn't available the client can request that the server program asks for the information. So this will require 2 way communications. Server can be started by client This should be easy as I have a defined folder structure and I can just run it, pause then re-request the info. System must handle text and numbers but not necessarily binary data (Though this would be a bonus). Well the list wasn't as long as I thought it would be. So what are your suggestions on an inter-process comms method that would allow all that? If there is anything else I should consider please let me know. Thanks All John Morrison Some of my small contributions to AutoIt Browse for Folder Dialog - Automation SysTreeView32 | FileHippo Download and/or retrieve program information | Get installedpath from uninstall key in registry | RoboCopy function John Morrison aka Storm-E Link to comment Share on other sites More sharing options...
guinness Posted January 13, 2014 Share Posted January 13, 2014 I use WM_COPYDATA (see signature) to send data to processes created by me or that can interact with the WM_COPYDATA message e.g, SciTE. UDF List: _AdapterConnections() • _AlwaysRun() • _AppMon() • _AppMonEx() • _ArrayFilter/_ArrayReduce • _BinaryBin() • _CheckMsgBox() • _CmdLineRaw() • _ContextMenu() • _ConvertLHWebColor()/_ConvertSHWebColor() • _DesktopDimensions() • _DisplayPassword() • _DotNet_Load()/_DotNet_Unload() • _Fibonacci() • _FileCompare() • _FileCompareContents() • _FileNameByHandle() • _FilePrefix/SRE() • _FindInFile() • _GetBackgroundColor()/_SetBackgroundColor() • _GetConrolID() • _GetCtrlClass() • _GetDirectoryFormat() • _GetDriveMediaType() • _GetFilename()/_GetFilenameExt() • _GetHardwareID() • _GetIP() • _GetIP_Country() • _GetOSLanguage() • _GetSavedSource() • _GetStringSize() • _GetSystemPaths() • _GetURLImage() • _GIFImage() • _GoogleWeather() • _GUICtrlCreateGroup() • _GUICtrlListBox_CreateArray() • _GUICtrlListView_CreateArray() • _GUICtrlListView_SaveCSV() • _GUICtrlListView_SaveHTML() • _GUICtrlListView_SaveTxt() • _GUICtrlListView_SaveXML() • _GUICtrlMenu_Recent() • _GUICtrlMenu_SetItemImage() • _GUICtrlTreeView_CreateArray() • _GUIDisable() • _GUIImageList_SetIconFromHandle() • _GUIRegisterMsg() • _GUISetIcon() • _Icon_Clear()/_Icon_Set() • _IdleTime() • _InetGet() • _InetGetGUI() • _InetGetProgress() • _IPDetails() • _IsFileOlder() • _IsGUID() • _IsHex() • _IsPalindrome() • _IsRegKey() • _IsStringRegExp() • _IsSystemDrive() • _IsUPX() • _IsValidType() • _IsWebColor() • _Language() • _Log() • _MicrosoftInternetConnectivity() • _MSDNDataType() • _PathFull/GetRelative/Split() • _PathSplitEx() • _PrintFromArray() • _ProgressSetMarquee() • _ReDim() • _RockPaperScissors()/_RockPaperScissorsLizardSpock() • _ScrollingCredits • _SelfDelete() • _SelfRename() • _SelfUpdate() • _SendTo() • _ShellAll() • _ShellFile() • _ShellFolder() • _SingletonHWID() • _SingletonPID() • _Startup() • _StringCompact() • _StringIsValid() • _StringRegExpMetaCharacters() • _StringReplaceWholeWord() • _StringStripChars() • _Temperature() • _TrialPeriod() • _UKToUSDate()/_USToUKDate() • _WinAPI_Create_CTL_CODE() • _WinAPI_CreateGUID() • _WMIDateStringToDate()/_DateToWMIDateString() • Au3 script parsing • AutoIt Search • AutoIt3 Portable • AutoIt3WrapperToPragma • AutoItWinGetTitle()/AutoItWinSetTitle() • Coding • DirToHTML5 • FileInstallr • FileReadLastChars() • GeoIP database • GUI - Only Close Button • GUI Examples • GUICtrlDeleteImage() • GUICtrlGetBkColor() • GUICtrlGetStyle() • GUIEvents • GUIGetBkColor() • Int_Parse() & Int_TryParse() • IsISBN() • LockFile() • Mapping CtrlIDs • OOP in AutoIt • ParseHeadersToSciTE() • PasswordValid • PasteBin • Posts Per Day • PreExpand • Protect Globals • Queue() • Resource Update • ResourcesEx • SciTE Jump • Settings INI • SHELLHOOK • Shunting-Yard • Signature Creator • Stack() • Stopwatch() • StringAddLF()/StringStripLF() • StringEOLToCRLF() • VSCROLL • WM_COPYDATA • More Examples... Updated: 22/04/2018 Link to comment Share on other sites More sharing options...
Inverted Posted January 13, 2014 Share Posted January 13, 2014 I suggest Named Pipes. You create it with CreateNamedPipe and connect to it with CreateFile and then communicate by ReadFile and WriteFile. Simplest way is to use the functions as blocking. Link to comment Share on other sites More sharing options...
JohnOne Posted January 13, 2014 Share Posted January 13, 2014 With you mentioning server and client, the first thing that comes to my mind is TCP connections. AutoIt Absolute Beginners Require a serial Pause Script Video Tutorials by Morthawt ipify Monkey's are, like, natures humans. Link to comment Share on other sites More sharing options...
storme Posted January 14, 2014 Author Share Posted January 14, 2014 Thanks JohnOne, Inverted and guinness JohnOne TCP had crossed my mind but I'd rather not as too any parts of the system have to be running for TCP to be working and most of the systems I work on are broken in some way. Thanks! inverted NamedPipes look interesting but I couldn't find enough details/examples to see if it would fit the bill. The help file is very sparse in it's handling of named pipes. Thanks! guinness WM_COPYDATA looks promising and I have found a few examples and some nice articles that should fill in the blanks. When I went to your original example I thought "This is not up to his usual standard..." (just the bare bones) Then I saw that it was 3 years ago and realized that it wasn't the coding Juggernaut we have now that had written the example. THANKS! So I'll do a little playing and see what I can come up with. Of course the next step is working out a system to pass messages/variables over the "link". Any suggestions? Thanks again! John Morrison Some of my small contributions to AutoIt Browse for Folder Dialog - Automation SysTreeView32 | FileHippo Download and/or retrieve program information | Get installedpath from uninstall key in registry | RoboCopy function John Morrison aka Storm-E Link to comment Share on other sites More sharing options...
guinness Posted January 14, 2014 Share Posted January 14, 2014 My example is informative and working. UDF List: _AdapterConnections() • _AlwaysRun() • _AppMon() • _AppMonEx() • _ArrayFilter/_ArrayReduce • _BinaryBin() • _CheckMsgBox() • _CmdLineRaw() • _ContextMenu() • _ConvertLHWebColor()/_ConvertSHWebColor() • _DesktopDimensions() • _DisplayPassword() • _DotNet_Load()/_DotNet_Unload() • _Fibonacci() • _FileCompare() • _FileCompareContents() • _FileNameByHandle() • _FilePrefix/SRE() • _FindInFile() • _GetBackgroundColor()/_SetBackgroundColor() • _GetConrolID() • _GetCtrlClass() • _GetDirectoryFormat() • _GetDriveMediaType() • _GetFilename()/_GetFilenameExt() • _GetHardwareID() • _GetIP() • _GetIP_Country() • _GetOSLanguage() • _GetSavedSource() • _GetStringSize() • _GetSystemPaths() • _GetURLImage() • _GIFImage() • _GoogleWeather() • _GUICtrlCreateGroup() • _GUICtrlListBox_CreateArray() • _GUICtrlListView_CreateArray() • _GUICtrlListView_SaveCSV() • _GUICtrlListView_SaveHTML() • _GUICtrlListView_SaveTxt() • _GUICtrlListView_SaveXML() • _GUICtrlMenu_Recent() • _GUICtrlMenu_SetItemImage() • _GUICtrlTreeView_CreateArray() • _GUIDisable() • _GUIImageList_SetIconFromHandle() • _GUIRegisterMsg() • _GUISetIcon() • _Icon_Clear()/_Icon_Set() • _IdleTime() • _InetGet() • _InetGetGUI() • _InetGetProgress() • _IPDetails() • _IsFileOlder() • _IsGUID() • _IsHex() • _IsPalindrome() • _IsRegKey() • _IsStringRegExp() • _IsSystemDrive() • _IsUPX() • _IsValidType() • _IsWebColor() • _Language() • _Log() • _MicrosoftInternetConnectivity() • _MSDNDataType() • _PathFull/GetRelative/Split() • _PathSplitEx() • _PrintFromArray() • _ProgressSetMarquee() • _ReDim() • _RockPaperScissors()/_RockPaperScissorsLizardSpock() • _ScrollingCredits • _SelfDelete() • _SelfRename() • _SelfUpdate() • _SendTo() • _ShellAll() • _ShellFile() • _ShellFolder() • _SingletonHWID() • _SingletonPID() • _Startup() • _StringCompact() • _StringIsValid() • _StringRegExpMetaCharacters() • _StringReplaceWholeWord() • _StringStripChars() • _Temperature() • _TrialPeriod() • _UKToUSDate()/_USToUKDate() • _WinAPI_Create_CTL_CODE() • _WinAPI_CreateGUID() • _WMIDateStringToDate()/_DateToWMIDateString() • Au3 script parsing • AutoIt Search • AutoIt3 Portable • AutoIt3WrapperToPragma • AutoItWinGetTitle()/AutoItWinSetTitle() • Coding • DirToHTML5 • FileInstallr • FileReadLastChars() • GeoIP database • GUI - Only Close Button • GUI Examples • GUICtrlDeleteImage() • GUICtrlGetBkColor() • GUICtrlGetStyle() • GUIEvents • GUIGetBkColor() • Int_Parse() & Int_TryParse() • IsISBN() • LockFile() • Mapping CtrlIDs • OOP in AutoIt • ParseHeadersToSciTE() • PasswordValid • PasteBin • Posts Per Day • PreExpand • Protect Globals • Queue() • Resource Update • ResourcesEx • SciTE Jump • Settings INI • SHELLHOOK • Shunting-Yard • Signature Creator • Stack() • Stopwatch() • StringAddLF()/StringStripLF() • StringEOLToCRLF() • VSCROLL • WM_COPYDATA • More Examples... Updated: 22/04/2018 Link to comment Share on other sites More sharing options...
storme Posted January 14, 2014 Author Share Posted January 14, 2014 My example is informative and working. With no commenting in either the UDF or the Example it makes it hard to expand on either to make any reliable code. For example. From the example _WM_COPYDATA_SetID('BAC92AA6-FDD8-11E1-91FF-3EE2937D8BEC') Calls this in the UDF Func _WM_COPYDATA_SetID($sIDString) $__vInterCommunicationAPI[$__sInterCommunicationIDString] = $sIDString Return $sIDString EndFunc ;==>_WM_COPYDATA_SetID I now know that the ID is used to identify the .... well I'm not sure now... communications channel/program??? Someone else may just grab your code use it and it works out of the box. Until 2 programs using the same ID (neither programers knew it had to be unique) end up on the same computer and get their messages mixed up. What is the function _WM_COPYDATA_GetGUI() used for? Should I use it or is it just internal? And the question I haven't found an answer to yet. How much data can I transfer using this? AND is there any restriction on the type of data (eg String only or binary data OK)?? Anyway that is what I meant by (just the bare bones).... Thanks again John Some of my small contributions to AutoIt Browse for Folder Dialog - Automation SysTreeView32 | FileHippo Download and/or retrieve program information | Get installedpath from uninstall key in registry | RoboCopy function John Morrison aka Storm-E Link to comment Share on other sites More sharing options...
guinness Posted January 14, 2014 Share Posted January 14, 2014 I will add comments when I have finished working on the important stuff e.g. help file and UDFs. UDF List: _AdapterConnections() • _AlwaysRun() • _AppMon() • _AppMonEx() • _ArrayFilter/_ArrayReduce • _BinaryBin() • _CheckMsgBox() • _CmdLineRaw() • _ContextMenu() • _ConvertLHWebColor()/_ConvertSHWebColor() • _DesktopDimensions() • _DisplayPassword() • _DotNet_Load()/_DotNet_Unload() • _Fibonacci() • _FileCompare() • _FileCompareContents() • _FileNameByHandle() • _FilePrefix/SRE() • _FindInFile() • _GetBackgroundColor()/_SetBackgroundColor() • _GetConrolID() • _GetCtrlClass() • _GetDirectoryFormat() • _GetDriveMediaType() • _GetFilename()/_GetFilenameExt() • _GetHardwareID() • _GetIP() • _GetIP_Country() • _GetOSLanguage() • _GetSavedSource() • _GetStringSize() • _GetSystemPaths() • _GetURLImage() • _GIFImage() • _GoogleWeather() • _GUICtrlCreateGroup() • _GUICtrlListBox_CreateArray() • _GUICtrlListView_CreateArray() • _GUICtrlListView_SaveCSV() • _GUICtrlListView_SaveHTML() • _GUICtrlListView_SaveTxt() • _GUICtrlListView_SaveXML() • _GUICtrlMenu_Recent() • _GUICtrlMenu_SetItemImage() • _GUICtrlTreeView_CreateArray() • _GUIDisable() • _GUIImageList_SetIconFromHandle() • _GUIRegisterMsg() • _GUISetIcon() • _Icon_Clear()/_Icon_Set() • _IdleTime() • _InetGet() • _InetGetGUI() • _InetGetProgress() • _IPDetails() • _IsFileOlder() • _IsGUID() • _IsHex() • _IsPalindrome() • _IsRegKey() • _IsStringRegExp() • _IsSystemDrive() • _IsUPX() • _IsValidType() • _IsWebColor() • _Language() • _Log() • _MicrosoftInternetConnectivity() • _MSDNDataType() • _PathFull/GetRelative/Split() • _PathSplitEx() • _PrintFromArray() • _ProgressSetMarquee() • _ReDim() • _RockPaperScissors()/_RockPaperScissorsLizardSpock() • _ScrollingCredits • _SelfDelete() • _SelfRename() • _SelfUpdate() • _SendTo() • _ShellAll() • _ShellFile() • _ShellFolder() • _SingletonHWID() • _SingletonPID() • _Startup() • _StringCompact() • _StringIsValid() • _StringRegExpMetaCharacters() • _StringReplaceWholeWord() • _StringStripChars() • _Temperature() • _TrialPeriod() • _UKToUSDate()/_USToUKDate() • _WinAPI_Create_CTL_CODE() • _WinAPI_CreateGUID() • _WMIDateStringToDate()/_DateToWMIDateString() • Au3 script parsing • AutoIt Search • AutoIt3 Portable • AutoIt3WrapperToPragma • AutoItWinGetTitle()/AutoItWinSetTitle() • Coding • DirToHTML5 • FileInstallr • FileReadLastChars() • GeoIP database • GUI - Only Close Button • GUI Examples • GUICtrlDeleteImage() • GUICtrlGetBkColor() • GUICtrlGetStyle() • GUIEvents • GUIGetBkColor() • Int_Parse() & Int_TryParse() • IsISBN() • LockFile() • Mapping CtrlIDs • OOP in AutoIt • ParseHeadersToSciTE() • PasswordValid • PasteBin • Posts Per Day • PreExpand • Protect Globals • Queue() • Resource Update • ResourcesEx • SciTE Jump • Settings INI • SHELLHOOK • Shunting-Yard • Signature Creator • Stack() • Stopwatch() • StringAddLF()/StringStripLF() • StringEOLToCRLF() • VSCROLL • WM_COPYDATA • More Examples... Updated: 22/04/2018 Link to comment Share on other sites More sharing options...
trancexx Posted January 14, 2014 Share Posted January 14, 2014 Well, you could use Mailslots. Depending on your needs the communication can be both ways, for example if client sends their "address" to the server and server upon receiving it responds by sending specific data to that address. You have small example in >examples. ♡♡♡ . eMyvnE Link to comment Share on other sites More sharing options...
storme Posted January 15, 2014 Author Share Posted January 15, 2014 Thanks trancexx Mailslots was another one I looked at in the past. I "think" I dismissed it at the time (for that project) because it had a small message size.... I've done a search now but can't find the size limit so I maybe misremembering.. Do you know what the limit is? I do like the UDF though and if the limit (if it exists) isn't severe then it will solve a few situations I would have had to write code to handle. Thanks for the info John Morrison Some of my small contributions to AutoIt Browse for Folder Dialog - Automation SysTreeView32 | FileHippo Download and/or retrieve program information | Get installedpath from uninstall key in registry | RoboCopy function John Morrison aka Storm-E Link to comment Share on other sites More sharing options...
JohnOne Posted January 15, 2014 Share Posted January 15, 2014 Have you considered using an sqlite database for comms? One drawback would be that there can be only one user who can wrire to the database if used over a network. (if I recall correctly) AutoIt Absolute Beginners Require a serial Pause Script Video Tutorials by Morthawt ipify Monkey's are, like, natures humans. Link to comment Share on other sites More sharing options...
storme Posted January 15, 2014 Author Share Posted January 15, 2014 Have you considered using an sqlite database for comms? One drawback would be that there can be only one user who can wrire to the database if used over a network. (if I recall correctly) That's not an issue as this is only to be on the one computer and only by one user at a time. The trouble is I'd prefer if information isn't left "laying around" on the computer. (E.G. my passwords) That is why the other methods are more attractive as sensitive info (like passwords) will disappear as soon as the server terminates. Unless you have something that will remove this concern? Thanks for the suggestion! John Morrison Some of my small contributions to AutoIt Browse for Folder Dialog - Automation SysTreeView32 | FileHippo Download and/or retrieve program information | Get installedpath from uninstall key in registry | RoboCopy function John Morrison aka Storm-E Link to comment Share on other sites More sharing options...
trancexx Posted January 15, 2014 Share Posted January 15, 2014 Thanks trancexx Mailslots was another one I looked at in the past. I "think" I dismissed it at the time (for that project) because it had a small message size.... I've done a search now but can't find the size limit so I maybe misremembering.. Do you know what the limit is? I do like the UDF though and if the limit (if it exists) isn't severe then it will solve a few situations I would have had to write code to handle. Thanks for the info John Morrison There are no limits for the usage you describe. ♡♡♡ . eMyvnE Link to comment Share on other sites More sharing options...
JohnOne Posted January 15, 2014 Share Posted January 15, 2014 That's not an issue as this is only to be on the one computer and only by one user at a time. The trouble is I'd prefer if information isn't left "laying around" on the computer. (E.G. my passwords) That is why the other methods are more attractive as sensitive info (like passwords) will disappear as soon as the server terminates. Unless you have something that will remove this concern? Thanks for the suggestion! John Morrison I'd assume you would know where any passwords would be stored in the db, they'd just have to be removed on app exit, or the whole db file destroyed depending on your needs. AutoIt Absolute Beginners Require a serial Pause Script Video Tutorials by Morthawt ipify Monkey's are, like, natures humans. Link to comment Share on other sites More sharing options...
jchd Posted January 15, 2014 Share Posted January 15, 2014 As a sidenote, any SQLite database can be secured at any time by strong encryption. You just have to provide the password which you can get thru volatile input or other means. All operation is unchanged. This wonderful site allows debugging and testing regular expressions (many flavors available). An absolute must have in your bookmarks.Another excellent RegExp tutorial. Don't forget downloading your copy of up-to-date pcretest.exe and pcregrep.exe hereRegExp tutorial: enough to get startedPCRE v8.33 regexp documentation latest available release and currently implemented in AutoIt beta. SQLitespeed is another feature-rich premier SQLite manager (includes import/export). Well worth a try.SQLite Expert (freeware Personal Edition or payware Pro version) is a very useful SQLite database manager.An excellent eBook covering almost every aspect of SQLite3: a must-read for anyone doing serious work.SQL tutorial (covers "generic" SQL, but most of it applies to SQLite as well)A work-in-progress SQLite3 tutorial. Don't miss other LxyzTHW pages!SQLite official website with full documentation (may be newer than the SQLite library that comes standard with AutoIt) Link to comment Share on other sites More sharing options...
storme Posted January 16, 2014 Author Share Posted January 16, 2014 As a sidenote, any SQLite database can be secured at any time by strong encryption. You just have to provide the password which you can get thru volatile input or other means. All operation is unchanged. Hmmm never thought of protecting the entire database like that.... AND it would solve some problems I have with another program/concept I have.... Thanks Mate you've given me a lot to think about John Morrison Some of my small contributions to AutoIt Browse for Folder Dialog - Automation SysTreeView32 | FileHippo Download and/or retrieve program information | Get installedpath from uninstall key in registry | RoboCopy function John Morrison aka Storm-E Link to comment Share on other sites More sharing options...
storme Posted January 16, 2014 Author Share Posted January 16, 2014 I'd assume you would know where any passwords would be stored in the db, they'd just have to be removed on app exit, or the whole db file destroyed depending on your needs. The only trouble is it relies on the program running to it's end end deleting the file...... If the program crashes then the password is left open in the system. . . Just thought of the solution to that. Create the DB with the password in it and set a "delete on start" entry to have it removed. That way even if the program crashes the file will be deleted....Though it could be undeleted....sigh Thanks! John Morrison Some of my small contributions to AutoIt Browse for Folder Dialog - Automation SysTreeView32 | FileHippo Download and/or retrieve program information | Get installedpath from uninstall key in registry | RoboCopy function John Morrison aka Storm-E Link to comment Share on other sites More sharing options...
storme Posted January 16, 2014 Author Share Posted January 16, 2014 There are no limits for the usage you describe. But what at the limitations? Is there a size limit on the messages that can be sent? Just for my own reference in case I find a use for it in another context but run into an unknown limitation. Thanks! John Morrison Some of my small contributions to AutoIt Browse for Folder Dialog - Automation SysTreeView32 | FileHippo Download and/or retrieve program information | Get installedpath from uninstall key in registry | RoboCopy function John Morrison aka Storm-E Link to comment Share on other sites More sharing options...
trancexx Posted January 16, 2014 Share Posted January 16, 2014 There are no limitations in case you don't go over network. ♡♡♡ . eMyvnE Link to comment Share on other sites More sharing options...
jchd Posted January 16, 2014 Share Posted January 16, 2014 If you ever need encryption of an SQLite DB, you need to download a mixed-assembly precompiled binary from this site. Choose the x86 or x64 version depending on your AutoIt build option. Refer to >this thread for using the encryption feature. This wonderful site allows debugging and testing regular expressions (many flavors available). An absolute must have in your bookmarks.Another excellent RegExp tutorial. Don't forget downloading your copy of up-to-date pcretest.exe and pcregrep.exe hereRegExp tutorial: enough to get startedPCRE v8.33 regexp documentation latest available release and currently implemented in AutoIt beta. SQLitespeed is another feature-rich premier SQLite manager (includes import/export). Well worth a try.SQLite Expert (freeware Personal Edition or payware Pro version) is a very useful SQLite database manager.An excellent eBook covering almost every aspect of SQLite3: a must-read for anyone doing serious work.SQL tutorial (covers "generic" SQL, but most of it applies to SQLite as well)A work-in-progress SQLite3 tutorial. Don't miss other LxyzTHW pages!SQLite official website with full documentation (may be newer than the SQLite library that comes standard with AutoIt) Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now