ウェブブラウザコントロールから、Submitボタンとかでフォームないようを受け取るには?


たかみちえ  2001-12-04 08:25:50  No: 75073

ウェブブラウザコントロールで表示するページないにフォームを作って、
そのフォームのないようを、中のSubmitボタンなどから受け取るには
どういうふうにすればいいんでしょう?


Say  2001-12-04 10:58:57  No: 75074

Submitを押すと、データはHTTPサーバに送られます。
VBのような実行ファイルの場合、CGIにして
HTTPサーバからデータを渡してもらう必要があります。
VBの場合、標準で標準入力が使えませんので、
うけとるだけなら環境変数を使うほうが楽です。
返す必要があるなら、APIで標準出力使ってください。


たかみちえ  2001-12-05 09:28:13  No: 75075

う゛…。
  スタイルシートのテンプレート用の設定をさせたいだけなのに、そこまですることになるとは…。
うーん、JScriptとかでファイルを保存してもらって、そこから読み取るようにします。
結果、方法を変えてしまってごめんなさい。


Say  2001-12-06 07:12:11  No: 75076

スタイルシートを作るのが目的なら、
Environ 関数でHTTPサーバから
環境変数受け取って、CSSファイルを
Webフォルダに吐き出すだけでいいかも・・・
でも、「更新」押さないと反映されないような・・・。


たかみちえ  2001-12-06 09:04:06  No: 75077

スタイルシートの作成ウィザードの1ページみたいな感じで…。

>Webフォルダに吐き出すだけでいいかも・・・
  たしかに、でもそれも、
>でも、「更新」押さないと反映されないような・・・。
  この理由で…^^;

  まあ練習がてらにDHTMLを使った方法のほうをやってみようかと思います。
(bodyのスタイルを変えてスクロールバーの色を変えたり文字色を変えたり…)


Say  2001-12-18 01:56:08  No: 75078

参考までに・・・
VBを使ったCGIの例です。
根性がないので、今回は環境変数経由で取得してます。
ついでにBCC(Borland C++)の例もあげてます。
適当に作ってますから、エラー処理してません。(^_^;

テストにあたっては、HTTPサーバ(Apache,IISなど)を立てて、
CGIの設定をしてください。そして、CGI用フォルダに
コンパイル済みのEXEファイルを置き、
WebフォルダにHTMLファイルを置いて、
CGIMenu.htmlをダブルクリックして実行してください。

コンパイル時の注意
エラー処理してませんので、コンパイル前のソースを
エディトモードで実行したり、
EXEファイルを直接実行したりしないでください。
メモリアクセス違反で落ちます。

VBコンパイル時の注意
起動時にデフォルトで用意されるFormモジュールを開放し、
かわりに標準モジュールを用意して、その中に
コードを書いて、コンパイルしてください。

BCCコンパイル時の注意。
とくになし。
ふだんWinアプリばかり作っている人は
-Wオプションはずすの忘れずに・・・。

=========================================================
呼出元HTMLの呼出元ソースの例(CGIMenu.html)
---------------------------------------------------------
<html>
  <head>
    <title>CGIてすと</title>
  </head>
  <body>
    <center><h1>CGIてすとめにゅー<br></h1></center>
    <a href="http://localhost/~say_home/VBCGITest.html">VBCGITest</a><br>
    <a href="http://localhost/~say_home/BCCCGITest.html">BCCCGITest</a><br>
  </body>
</html>
=========================================================
VB呼出元HTMLソース(VBCGITest.html)
---------------------------------------------------------
<HTML>
  <HEAD>
    <TYTLE>VB CGI TEST<BR><BR></TYTLE>
  </HEAD>
  <BODY>
    <center><h1>VB CGI TEST</h1></center><br><br>
    入力:
    <FORM method="get" enctype="text/plain" action="cgi-bin/VBCGI01.exe">
      Text1:<INPUT type="text" name="Text1" value="aaa" size="14" maxlength="14"><BR><BR>
      Text2:<INPUT type="text" name="Text2" value="bbb" size="14" maxlength="14"><BR><BR>
 
      <INPUT type="submit" value="VBCGIGET"><BR>
      <INPUT type="reset" value="キャンセル">
    </FORM>
    <BR>
  </BODY>
</HTML>
=========================================================
BCC呼出元HTMLソース(BCCCGITest.html)
---------------------------------------------------------
<HTML>
  <HEAD>
    <TYTLE>BCC CGI TEST<BR><BR></TYTLE>
  </HEAD>
  <BODY>
    <center><h1>BCC CGI TEST</h1></center><br><br>
    入力:
    <FORM method="get" enctype="text/plain" action="cgi-bin/BCCCGI01.exe">
      Text3:<INPUT type="text" name="Text3" value="ccc" size="14" maxlength="14"><BR><BR>
      Text4:<INPUT type="text" name="Text4" value="ddd" size="14" maxlength="14"><BR><BR>
 
      <INPUT type="submit" value="BCCCGIGET"><BR>
      <INPUT type="reset" value="キャンセル">
    </FORM>
    <BR>
  </BODY>
</HTML>
=========================================================
VB CGI ソース(コンパイル後は VBCGI01.exe)
---------------------------------------------------------
Option Explicit
'標準入出力用の宣言部
Private Declare Function GetStdHandle Lib "kernel32" _
    (ByVal nStdHandle As Long) As Long
Private Declare Function ReadFile Lib "kernel32" _
    (ByVal hFile As Long, lpBuffer As Any, _
    ByVal nNumberOfBytesToRead As Long, _
    lpNumberOfBytesRead As Long, _
    lpOverlapped As Any) As Long
Private Declare Function WriteFile Lib "kernel32" _
    (ByVal hFile As Long, ByVal lpBuffer As String, _
    ByVal nNumberOfBytesToWrite As Long, _
    pNumberOfBytesWritten As Long, _
    lpOverlapped As Any) As Long
Public Const STD_INPUT_HANDLE = -10&
Public Const STD_OUTPUT_HANDLE = -11&
Public Const INVALID_HANDLE_VALUE = -1&
Dim mlngStdInHandle As Long
Dim mlngStdOutHandle As Long
Private Function stdinit() As Long
'標準入出力ハンドル取得
    Dim lngStdInHandle As Long
    Dim lngStdOutHandle As Long
    mlngStdInHandle = GetStdHandle(STD_INPUT_HANDLE)
    If mlngStdInHandle = INVALID_HANDLE_VALUE Then
        MsgBox "Error STD_INPUT_HANDLE"
    End If
    mlngStdOutHandle = GetStdHandle(STD_OUTPUT_HANDLE)
    If mlngStdOutHandle = INVALID_HANDLE_VALUE Then
        MsgBox "Error STD_OUTPUT_HANDLE"
    End If
End Function
Private Function puts(strOutString As String) As Long
'標準出力
    Dim lngStringLength As Long
    Dim lngResultBytes As Long
    Dim Buffer As String
    strOutString = strOutString & vbCrLf
    lngStringLength = LenB(StrConv(strOutString, vbFromUnicode)) + 2
    puts = WriteFile(mlngStdOutHandle, strOutString, lngStringLength, lngResultBytes, ByVal 0&)

End Function
Private Function gets(strInString As String) As Long
'標準入力
    Dim lngStringLength As Long
    Dim lngResultBytes As Long
    Dim dummy0
    Dim faleMsg As String
    faleMsg = "Sorry&"
    dummy0 = Environ("CONTENT_LENGTH")
    If IsNumeric(dummy0) = False Then
        strInString = faleMsg & "NotNumeric"
        gets = 0
    Else
        lngStringLength = CLng(dummy0)
        If lngStringLength > 0 Then
            strInString = Space(lngStringLength)
            gets = ReadFile(mlngStdInHandle, strInString, lngStringLength, lngResultBytes, ByVal 0&)
        Else
            strInString = faleMsg & "NullString"
            gets = 0
        End If
    End If
End Function
Private Function ReadHTML(array0)
    Dim strInString As String
    If Environ("REQUEST_METHOD") = "GET" Then           '環境変数で取得
        array0 = Split(Environ("QUERY_STRING"), "&")
    ElseIf Environ("REQUEST_METHOD") = "POST" Then      '標準入力で取得                                       '標準入力で取得
        Call gets(strInString)
        array0 = Split(strInString, "&")
    Else                                                'GET POST 以外
        array0 = Split("Sorry&Cant Get", "&")
    End If
End Function
Private Function WriteHTML(array0)
'    MsgBox "put now"
'    puts "HTTP/1.1 200 OK" & vbCrLf
    puts "content-type: text/html"
    puts ""
    puts "<html>"
    puts "  <head>"
    puts "    <title>"
    puts "      たいとる"
    puts "    </title>"
    puts "  </head>"
    puts "  <body>"
    puts "    <center><h1>VBCGIなかみ</h1></center><br>"
    puts "    <hr>"
    puts array0(0) & "<br>"
    puts array0(1) & "<br>"
    puts "  </body>"
    puts "</html>"
End Function
Sub Main()
    Dim array0
    Call stdinit
    Call ReadHTML(array0)
    Call WriteHTML(array0)
End Sub
=========================================================
BCC CGI ソース(コンパイル後は BCCCGI01.exe)
---------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void ReadHTML(char *array0,int *array1)
{
  //HTML Formからのデータリード
  //今回はGETのみ対応
  int i ;
  strcpy(array0, getenv("QUERY_STRING"));
  for(i = 0;i<256;i++)
  {
    if(*(array0 + i) == '&')
    {
      *(array0 + i) = '\0';
      *array1 = (int)array0 + i + 1;
      break ;
    };
  };
  
};
void WriteHTML(char *array0,char *array1)
{
  puts("content-type: text/html\n");
  puts("<html>");
  puts("  <head>");
  puts("    <title>");
  puts("      たいとる");
  puts("    </title>");
  puts("  </head>");
  puts("  <body>");
  puts("    <center><h1>BCCCGIなかみ</h1></center><br>");
  puts("    <hr>");
  puts(array0);puts("<br>");
  puts(array1);puts("<br>");
  puts("  </body>");
  puts("</html>");
}
void main(void)
{
  char array0[256];
  int array1;
  ReadHTML(array0,&array1);
  WriteHTML(array0,(char *)array1);
}
=========================================================
感想:こーゆー処理はCのほうがらくだ。(^_^)


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加