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

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)

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

On Fri, 24 Sep 2010 08:45:53 -0500, iMelody O. [email protected]
wrote in [email protected]:

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 C. wrote in post #955442:

On Fri, 24 Sep 2010 08:45:53 -0500, iMelody O. [email protected]
wrote in [email protected]:

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??

On Tue, 19 Oct 2010 09:40:41 -0500, Amit T. [email protected]
wrote in [email protected]:

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.

On Thu, 23 Sep 2010 04:58:11 -0500, iMelody O. [email protected]
wrote in [email protected]:

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.