Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VBA: WebBrowserin sivun tyhjentäminen

Short Php [05.06.2009 20:17:30]

#

Eli olen tekemässä ohjelmaa joka tarkistaa linkit mahdollisten meatspin/rick roll uudelleenohjauksien varalta. Ainoa ongelma on että minulla on webbrowser josta tarkistetaan onko sivu sama kuin haettu uudelleenohjaussivu (esim tr.im) mutta esim rick rollissa kuuluu ääni taustalta ja smouch.net/lol tapauksessa kun yrittää ohjelmasta päästä pois/hakea uusi sivu. Tulee näyttöön alertboxeja. Eli miten saisi nettisivun tyhjennettyä. Olen yrittänyt webbrowser1.documenttext = "" mutta se bugittaa selaimen täysin (lataa kokoajan uudestaan about:blank sivua). Miten sen saisi tehtyä toimivasti?

alker [17.06.2009 19:48:01]

#

Laita niin että sitten se muokkaa asetuksista javascriptin pois ja ohjaa käyttäjän uudelle sivulle. Teet joko sellaseen sivun nettii missä lukee esim. Pääsysi on evätty sivulle koska siellä on turhaa materiaalia tai linkitä se vaikka google.fihin

neau33 [20.06.2009 12:20:05]

#

Heippa Short Php!

mikäli on tarvetta tyhjennellä internet-cache'a ohjelmallisesti niin tässä olis valmis luokka...

Imports System
Imports System.Runtime.InteropServices

Public Class DeleteCache

'FindFirstURLCacheEntry-funktiolla voi etsiä ensimmäisen välimuistimerkinnän
'FindNextUrlCacheEntry-fuktiolla voi rullata läpi koko välimuistiluettelon
'DeleteUrlCacheEntry-funktiolla voi poistaa välimuistiluettelosta merkinnän

	<StructLayout(LayoutKind.Explicit, Size := 80)> _
	Public Structure INTERNET_CACHE_ENTRY_INFOA
		<FieldOffset(0)> _
		Public dwStructSize As UInteger
		<FieldOffset(4)> _
		Public lpszSourceUrlName As IntPtr
		<FieldOffset(8)> _
		Public lpszLocalFileName As IntPtr
		<FieldOffset(12)> _
		Public CacheEntryType As UInteger
		<FieldOffset(16)> _
		Public dwUseCount As UInteger
		<FieldOffset(20)> _
		Public dwHitRate As UInteger
		<FieldOffset(24)> _
		Public dwSizeLow As UInteger
		<FieldOffset(28)> _
		Public dwSizeHigh As UInteger
		<FieldOffset(32)> _
		Public LastModifiedTime As _
		System.Runtime.InteropServices.ComTypes.FILETIME
		<FieldOffset(40)> _
		Public ExpireTime As _
		System.Runtime.InteropServices.ComTypes.FILETIME
		<FieldOffset(48)> _
		Public LastAccessTime As _
		System.Runtime.InteropServices.ComTypes.FILETIME
		<FieldOffset(56)> _
		Public LastSyncTime As _
		System.Runtime.InteropServices.ComTypes.FILETIME
		<FieldOffset(64)> _
		Public lpHeaderInfo As IntPtr
		<FieldOffset(68)> _
		Public dwHeaderInfoSize As UInteger
		<FieldOffset(72)> _
		Public lpszFileExtension As IntPtr
		<FieldOffset(76)> _
		Public dwReserved As UInteger
		<FieldOffset(76)> _
		Public dwExemptDelta As UInteger
	End Structure


	<DllImport("wininet", SetLastError := True, CharSet := CharSet.Auto, EntryPoint := "FindFirstUrlCacheGroup", CallingConvention := CallingConvention.StdCall)> _
	Public Shared Function FindFirstUrlCacheGroup(dwFlags As Integer, dwFilter As Integer, lpSearchCondition As IntPtr, dwSearchCondition As Integer, ByRef lpGroupId As Long, lpReserved As IntPtr) As IntPtr
	End Function

	<DllImport("wininet", SetLastError := True, CharSet := CharSet.Auto, EntryPoint := "FindNextUrlCacheGroup", CallingConvention := CallingConvention.StdCall)> _
	Public Shared Function FindNextUrlCacheGroup(hFind As IntPtr, ByRef lpGroupId As Long, lpReserved As IntPtr) As Boolean
	End Function

	<DllImport("wininet", SetLastError := True, CharSet := CharSet.Auto, EntryPoint := "DeleteUrlCacheGroup", CallingConvention := CallingConvention.StdCall)> _
	Public Shared Function DeleteUrlCacheGroup(GroupId As Long, dwFlags As Integer, lpReserved As IntPtr) As Boolean
	End Function

	<DllImport("wininet", SetLastError := True, CharSet := CharSet.Auto, EntryPoint := "FindFirstUrlCacheEntryA", CallingConvention := CallingConvention.StdCall)> _
	Public Shared Function FindFirstUrlCacheEntry(<MarshalAs(UnmanagedType.LPTStr)> lpszUrlSearchPattern As String, lpFirstCacheEntryInfo As IntPtr, ByRef lpdwFirstCacheEntryInfoBufferSize As Integer) As IntPtr
	End Function

	<DllImport("wininet", SetLastError := True, CharSet := CharSet.Auto, EntryPoint := "FindNextUrlCacheEntryA", CallingConvention := CallingConvention.StdCall)> _
	Public Shared Function FindNextUrlCacheEntry(hFind As IntPtr, lpNextCacheEntryInfo As IntPtr, ByRef lpdwNextCacheEntryInfoBufferSize As Integer) As Boolean
	End Function

	<DllImport("wininet", SetLastError := True, CharSet := CharSet.Auto, EntryPoint := "DeleteUrlCacheEntryA", CallingConvention := CallingConvention.StdCall)> _
	Public Shared Function DeleteUrlCacheEntry(lpszUrlName As IntPtr) As Boolean
	End Function

	<STAThread> _
	Private Shared Sub Main(args As String())

		Const  CACHEGROUP_SEARCH_ALL As Integer = &H0
		Const  CACHEGROUP_FLAG_FLUSHURL_ONDELETE As Integer = &H2
		Const  ERROR_FILE_NOT_FOUND As Integer = &H2
		Const  ERROR_NO_MORE_ITEMS As Integer = 259
		Dim groupId As Long = 0

		Dim cacheEntryInfoBufferSizeInitial As Integer = 0
		Dim cacheEntryInfoBufferSize As Integer = 0
		Dim cacheEntryInfoBuffer As IntPtr = IntPtr.Zero
		Dim internetCacheEntry As INTERNET_CACHE_ENTRY_INFOA
		Dim enumHandle As IntPtr = IntPtr.Zero
		Dim returnValue As Boolean = False

		enumHandle = FindFirstUrlCacheGroup(0, CACHEGROUP_SEARCH_ALL, IntPtr.Zero, 0, groupId, IntPtr.Zero)

		If enumHandle <> IntPtr.Zero AndAlso ERROR_NO_MORE_ITEMS = Marshal.GetLastWin32Error() Then
		Return
		End If

		While True
		returnValue = DeleteUrlCacheGroup(groupId, CACHEGROUP_FLAG_FLUSHURL_ONDELETE, IntPtr.Zero)
		If Not returnValue AndAlso ERROR_FILE_NOT_FOUND = Marshal.GetLastWin32Error() Then
			returnValue = FindNextUrlCacheGroup(enumHandle, groupId, IntPtr.Zero)
		End If

		If Not returnValue AndAlso (ERROR_NO_MORE_ITEMS = Marshal.GetLastWin32Error() OrElse ERROR_FILE_NOT_FOUND = Marshal.GetLastWin32Error()) Then
			Exit While
		End If
		End While
		enumHandle = FindFirstUrlCacheEntry(Nothing, IntPtr.Zero, cacheEntryInfoBufferSizeInitial)
		If enumHandle = IntPtr.Zero AndAlso ERROR_NO_MORE_ITEMS = Marshal.GetLastWin32Error() Then
		Return
		End If

		cacheEntryInfoBufferSize = cacheEntryInfoBufferSizeInitial
		cacheEntryInfoBuffer = Marshal.AllocHGlobal(cacheEntryInfoBufferSize)
		enumHandle = FindFirstUrlCacheEntry(Nothing, cacheEntryInfoBuffer, cacheEntryInfoBufferSizeInitial)

		While True
		internetCacheEntry = CType(Marshal.PtrToStructure(cacheEntryInfoBuffer, GetType(INTERNET_CACHE_ENTRY_INFOA)), INTERNET_CACHE_ENTRY_INFOA)

		cacheEntryInfoBufferSizeInitial = cacheEntryInfoBufferSize
		returnValue = DeleteUrlCacheEntry(internetCacheEntry.lpszSourceUrlName)
		If Not returnValue Then
			returnValue = FindNextUrlCacheEntry(enumHandle, cacheEntryInfoBuffer, cacheEntryInfoBufferSizeInitial)
		End If
		If Not returnValue AndAlso ERROR_NO_MORE_ITEMS = Marshal.GetLastWin32Error() Then
			Exit While
		End If
		If Not returnValue AndAlso cacheEntryInfoBufferSizeInitial > cacheEntryInfoBufferSize Then
			cacheEntryInfoBufferSize = cacheEntryInfoBufferSizeInitial
			cacheEntryInfoBuffer = Marshal.ReAllocHGlobal(cacheEntryInfoBuffer, CType(cacheEntryInfoBufferSize, IntPtr))
			returnValue = FindNextUrlCacheEntry(enumHandle, cacheEntryInfoBuffer, cacheEntryInfoBufferSizeInitial)
		End If
		End While
		Marshal.FreeHGlobal(cacheEntryInfoBuffer)
	End Sub

End Class

Mikäli haluat kääntää assemblyn .dll'ksi ja käyttää vaikkapa VB6 tahi VBA- ympäristössä niin katso täältä ohjeita comvisible-attribuutin käytöstä

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta