Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Capture program's arguments

  1. Dec 9, 2011 #1

    I have a program (it's HP printer manager software) that calls another program to send something to the printer. I found that program, but it can't run alone -- it says "device was not specified".

    I am positive there is just some kind of command-line argument missing, but there exists no documentation, so I wonder if there is a way to figure out how printer name is passed to that program. Of course, no source code exists.

    Also, in Windows 7 I could create a shortcut to that program (button, actually), but it points to a control panel item (I couldn't make this shortcut in Win XP), and opening this .lnk only throws out a pile of junk (see below).

    Code (Text):

    *×D“qľ°dɆƒ „!Ţ9qXf©¨}:$DŤ$á€i\zGA™gE3á1SPS˘pˆ‚`¬GŠ«§9ŃŁĂĹYProvider\Microsoft.Base.DeviceDisplayObjects//DDO:{1C852A4D-B800-1F08-ABCD-2C768AB16674}u1SPS0ń·ďGĄń`Śžë¬Y
    $HP Officejet 6500 E710n-z (Network)z1SPSł;jeŔěýC„wJŕ@J–Í HPE HP Officejet 6500 E710n-zU1SPSŔÔŤĐž:.F‚{ckvą9
    Printers and Faxesä1SPSČOĂxJĘJž¤RMR™nW]ZPrintFax.PrinterImaging.ScannerM ˙˙8 I9›c:\users\nejc\appdata\local\microsoft\device metadata\dmrccache\en-us\980b8cac-9db5-4165-9da0-1c9e24cd76c7\DeviceInformation\HP Officejet 6500 E710n-z.ico91SPSŇ~ŚŠ?'Hł«®ž®ülHM*…¸«Í,vŠ±ftí1SPS¦jc(=•ŇµÖŔOŮĐŃ_Provider    
    Any ideas?

  2. jcsd
  3. Dec 10, 2011 #2
    You could debug it, but that may violate some agreements you made with HP by installing the software (or setting up your computer, if it came preinstalled).

    To debug it, look for a call to some WinAPI function that starts a process. It will pass a pointer to the function. Find that string; it will contain the arguments.

    EDIT: Look for a call to this function: http://msdn.microsoft.com/en-us/library/windows/desktop/ms682425(v=vs.85).aspx.

    You can look for a call in Olly Debug 2 by right clicking the code window and going to Go to->Expression and typing "CreateProcess."
    Last edited: Dec 10, 2011
  4. Dec 11, 2011 #3
    Try this.

    if the program's name is a a.exe, then rename it as aold.exe.

    Write a new program a.exe does the following things
    1) Prints out the arguments passed to it in a file
    2) Call the original program with the same arguments

    Open the file in a text editor & you will see the arguments.
  5. Dec 11, 2011 #4
    Haha! I like that. I should have thought of that.
  6. Dec 12, 2011 #5
    The IDEA!

    Thanks men, you just made my day.

    Thanks to Tyler too, but I'm not that into computing, yesterday I nearly got killed by VC++ :)

    A computer shall never win against me (or PF)! .
  7. Dec 13, 2011 #6

    If you want the code for the program I suggested - here

    Code (Text):

    #include <iostream>
    #include <fstream>

    using std::ofstream;
    int main(int argc, char **argv)
            ofstream of("c:/tmp/tst"); // Change this to whatever path you want the
                                                // file to be written to
                    of<<*argv++<<' ';


  8. Dec 14, 2011 #7
    Yeah, I was able to do that by myself.
    Thanks anyway.
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook