How to open file dialog in Ruby, and get open FileName? :-(

Discussion in 'Ruby' started by iMelody Ooo, Sep 23, 2010.

  1. iMelody Ooo

    iMelody Ooo Guest

    This is a pop MessaheBox example, but I don't know how to open fiel
    dialog?

    shell = Win32API.new('user32','MessageBox',['L', 'P', 'P', 'L'],'I')
    shell.Call(0,"hello world","ShadowZ",0)
    --
    Posted via http://www.ruby-forum.com/.
    iMelody Ooo, Sep 23, 2010
    #1
    1. Advertising

  2. iMelody Ooo

    iMelody Ooo Guest

    I find an example from http://www.java2s.com , but pop error:

    main.rb:21:in `initialize': failed to create WIN32OLE object from
    `MSComDlg.CommonDialog' (WIN32OLERuntimeError)
    HRESULT error code:0x80040112


    cd = WIN32OLE.new("MSComDlg.CommonDialog")

    cd.filter = "All Files(*.*)|*.*" +"|Ruby Files(*.rb)|*.rb"
    cd.filterIndex = 2

    cd.maxFileSize = 128 # Set MaxFileSize
    cd.showOpen()
    file = cd.fileName # Retrieve file, path

    if not file or file==""
    puts "No filename entered."
    else
    puts "The user selected: #{file}\n"
    end
    --
    Posted via http://www.ruby-forum.com/.
    iMelody Ooo, Sep 24, 2010
    #2
    1. Advertising

  3. On Fri, 24 Sep 2010 08:45:53 -0500, iMelody Ooo <>
    wrote in <>:

    >I find an example from http://www.java2s.com , but pop error:
    >
    >main.rb:21:in `initialize': failed to create WIN32OLE object from
    >`MSComDlg.CommonDialog' (WIN32OLERuntimeError)
    > HRESULT error code:0x80040112


    Most likely you don't have comdlg32.ocx installed on the box. I'd
    just use the raw API via comdlg32.dll instead. Here's a thread that I
    found on this topic:
    <http://www.groupsrv.com/computers/about185459.html>

    --
    Charles Calvert
    Moderator - alt.computer.consultants.moderated
    Submission Address:
    Contact Address:
    Charles Calvert, Oct 19, 2010
    #3
  4. iMelody Ooo

    Amit Tomar Guest

    Charles Calvert wrote in post #955442:
    > On Fri, 24 Sep 2010 08:45:53 -0500, iMelody Ooo <>
    > wrote in <>:
    >
    >>I find an example from http://www.java2s.com , but pop error:
    >>
    >>main.rb:21:in `initialize': failed to create WIN32OLE object from
    >>`MSComDlg.CommonDialog' (WIN32OLERuntimeError)
    >> HRESULT error code:0x80040112

    >
    > Most likely you don't have comdlg32.ocx installed on the box. I'd
    > just use the raw API via comdlg32.dll instead. Here's a thread that I
    > found on this topic:
    > <http://www.groupsrv.com/computers/about185459.html>


    Charles is it possible to open this MessageBox on client side??

    --
    Posted via http://www.ruby-forum.com/.
    Amit Tomar, Oct 19, 2010
    #4
  5. On Thu, 23 Sep 2010 04:58:11 -0500, iMelody Ooo <>
    wrote in <>:

    >This is a pop MessaheBox example, but I don't know how to open fiel
    >dialog?
    >
    >shell = Win32API.new('user32','MessageBox',['L', 'P', 'P', 'L'],'I')
    >shell.Call(0,"hello world","ShadowZ",0)


    The signature of this function is:

    int MessageBox(
    HWND hWnd, // handle to owner window
    LPCTSTR lpText, // text in message box
    LPCTSTR lpCaption, // message box title
    UINT uType // message box style
    );

    so your call looks correct at first glance. Note that user32.dll
    doesn't export a function named "MessageBox". Instead, it exports
    "MessageBoxA" and "MessageBoxW". The former handles ASCII strings and
    the latter wide strings (i.e. Unicode). When writing C or C++ code,
    one includes the appropriate headers that define the name "MessageBox"
    as one of those two using a macro. It may be that you need to call
    the appropriate version of the function directly if the Win32API
    library doesn't handle that for you.

    --
    Charles Calvert
    Moderator - alt.computer.consultants.moderated
    Submission Address:
    Contact Address:
    Charles Calvert, Oct 19, 2010
    #5
  6. On Tue, 19 Oct 2010 09:40:41 -0500, Amit Tomar <>
    wrote in <>:

    >Charles Calvert wrote in post #955442:
    >> On Fri, 24 Sep 2010 08:45:53 -0500, iMelody Ooo <>
    >> wrote in <>:
    >>
    >>>I find an example from http://www.java2s.com , but pop error:
    >>>
    >>>main.rb:21:in `initialize': failed to create WIN32OLE object from
    >>>`MSComDlg.CommonDialog' (WIN32OLERuntimeError)
    >>> HRESULT error code:0x80040112

    >>
    >> Most likely you don't have comdlg32.ocx installed on the box. I'd
    >> just use the raw API via comdlg32.dll instead. Here's a thread that I
    >> found on this topic:
    >> <http://www.groupsrv.com/computers/about185459.html>

    >
    >Charles is it possible to open this MessageBox on client side??


    As I just responded to you in another thread, this question makes no
    sense. The Win32 API is the API for the 32 bit version of Windows,
    which is an OS. It is inherently client-side.

    --
    Charles Calvert
    Moderator - alt.computer.consultants.moderated
    Submission Address:
    Contact Address:
    Charles Calvert, Oct 21, 2010
    #6
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Replies:
    1
    Views:
    1,460
    Roland de Ruiter
    Jun 15, 2006
  2. Peter Otten
    Replies:
    0
    Views:
    416
    Peter Otten
    Nov 30, 2010
  3. Peter Otten
    Replies:
    10
    Views:
    864
    Nobody
    Dec 2, 2010
  4. Dan Stromberg
    Replies:
    0
    Views:
    920
    Dan Stromberg
    Dec 6, 2010
  5. Stefano Crocco
    Replies:
    0
    Views:
    143
    Stefano Crocco
    Nov 14, 2008
Loading...

Share This Page